/**
 * 
 */
package cn.ad.server.web.spring.model.adview;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Map;

/**
 * Bid 对象
 * @author Administrator
 *
 */
public class Bid {
	
	/**
	 * 计费方式
	 * @author Administrator
	 *
	 */
	public enum payMode {
		/**
		 * 0 文档中未定义
		 */
		UNDEFINED,
		/**
		 * 1- CPM
		 */
		CPM,
		/**
		 * 2- CPC
		 */
		CPC;
	}

	/**
	 * 广告点击行为类型
	 *
	 * @author Administrator
	 */
	public enum clickAction {

		/**
		 * 0 未确认
		 */
		UNKNOWN(0),
		/**
		 * 1 打开网页
		 */
		OPEN_WEB_PAGE(1),
		/**
		 * 2 下载应用
		 */
		DOWNLOAD_APP(2),
		/**
		 * 4 打开地图
		 */
		OPEN_MAP(4),
		/**
		 * 8 发送短信
		 */
		SEND_MESSAGE(8),
		/**
		 * 16 发送邮件
		 */
		SEND_MAIL(16),
		/**
		 * 32 拨打电话
		 */
		CALL(32),
		/**
		 * 64 播放视频
		 */
		PLAY_VIDEO(64),;

		private int value;

		private clickAction(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}
	}
	
	/**
	 * 对应 Impression 的唯一标识
	 */
	private String impid;
	
	/**
	 * 价格，数值为 CPM 或 CPC 价格*10000，如底价为 CPM 价格 0.6元，则取值 0.6*10000=6000
	 */
	private int price;
	
	/**
	 * DSP 计费方式（可根据不同广告分别设置）
	 *	 1- CPM
	 *	 2- CPC
	 *	【 缺省为 1】
	 */
	private int paymode;
	
	/**
	 * 广告点击行为类型
	 */
	private int adct;
	
	/**
	 * 广告 ID
	 */
	private String adid;
	
	/**
	 * 广告类型
	 */
	private int admt;
	
	/**
	 * 广告物料，为 HTML 代码段。
	 * admt=4 时不能为NULL
	 */
	private String adm;
	
	/**
	 * 根据 RTB 原生广告协议组装成NativeResponse
	 * admt=8 时 不能为NULL
	 */
	@JsonProperty("native")
	private NativeResponse nativeResponse;
	
	/**
	 * 图片/视频物料 URL
	 */
	private String adi;
	
	/**
	 * 文本物料标题
	 */
	private String adt;
	
	/**
	 * 文本物料副标题或描述，多个以换行分隔
	 */
	private String ads;
	
	/**
	 * 广告物料宽度
	 * 原生可不填
	 */
	private int adw;
	
	/**
	 * 广告物料高度
	 * 原生可不填
	 */
	private int adh;
	
	/**
	 * 广告需要播放的时长，主要针对插屏和开屏
	 */
	private Integer adtm;
	
	/**
	 * 广告过期时间，格式： YYYYmmddHHMM
	 * 例如：20140819-1230
	 */
	private String ade;
	
	/**
	 * 广告点击跳转落地页，可以支持重定向,为空代表不支持点击跳转
	 */
	private String adurl;
	
	/**
	 * 包含 deeplink 的点击跳转地址，无法打开则使用 adurl
	 * 搜索终端是否安装对应App，有则跳转至 App内容对应界面;无则跳转到普通落地页。
	 */
	private String deeplink;
	
	/**
	 * 广告主域名
	 */
	private String[] adomain;
	
	/**
	 * 赢价通知，由 AdView 服务器发出
	 */
	private String wurl;
	
	/**
	 * 带延迟的展示汇报，由客户端发送。形如：{ "0":["URL1", "URL2"],"10":["URL3", "URL4"]}
	 */
	private Map<String, String[]> nurl;
	
	/**
	 * 点击监控地址， 客户端逐个发送通知
	 */
	private String[] curl;
	
	/**
	 * 参考请求里的 deal.id，判断是否投标属于私有交易
	 */
	private String dealid;
	
	/**
	 * 广告创意 ID，可用于去重
	 */
	private String cid;
	
	/**
	 * 广告物料 ID
	 */
	private String crid;
	
	/**
	 * 广告创意属性
	 */
	private int[] attr;
	
	/**
	 * 扩展对象
	 */
	private Object ext;

	public int getPaymode() {
		return paymode;
	}

	public void setPaymode(int paymode) {
		this.paymode = paymode;
	}

	/**
	 * @return the impid
	 */
	public String getImpid() {
		return impid;
	}

	/**
	 * @param impid the impid to set
	 */
	public void setImpid(String impid) {
		this.impid = impid;
	}

	/**
	 * @return the price
	 */
	public int getPrice() {
		return price;
	}

	/**
	 * @param price the price to set
	 */
	public void setPrice(int price) {
		this.price = price;
	}

	public int getAdct() {
		return adct;
	}

	public void setAdct(int adct) {
		this.adct = adct;
	}

	/**
	 * @return the adid
	 */
	public String getAdid() {
		return adid;
	}

	/**
	 * @param adid the adid to set
	 */
	public void setAdid(String adid) {
		this.adid = adid;
	}

	public int getAdmt() {
		return admt;
	}

	public void setAdmt(int admt) {
		this.admt = admt;
	}

	/**
	 * @return the adm
	 */
	public String getAdm() {
		return adm;
	}

	/**
	 * @param adm the adm to set
	 */
	public void setAdm(String adm) {
		this.adm = adm;
	}

	/**
	 * @return the nativeResponse
	 */
	public NativeResponse getNativeResponse() {
		return nativeResponse;
	}

	/**
	 * @param nativeResponse the nativeResponse to set
	 */
	public void setNativeResponse(NativeResponse nativeResponse) {
		this.nativeResponse = nativeResponse;
	}

	/**
	 * @return the adi
	 */
	public String getAdi() {
		return adi;
	}

	/**
	 * @param adi the adi to set
	 */
	public void setAdi(String adi) {
		this.adi = adi;
	}

	/**
	 * @return the adt
	 */
	public String getAdt() {
		return adt;
	}

	/**
	 * @param adt the adt to set
	 */
	public void setAdt(String adt) {
		this.adt = adt;
	}

	/**
	 * @return the ads
	 */
	public String getAds() {
		return ads;
	}

	/**
	 * @param ads the ads to set
	 */
	public void setAds(String ads) {
		this.ads = ads;
	}

	/**
	 * @return the adw
	 */
	public int getAdw() {
		return adw;
	}

	/**
	 * @param adw the adw to set
	 */
	public void setAdw(int adw) {
		this.adw = adw;
	}

	/**
	 * @return the adh
	 */
	public int getAdh() {
		return adh;
	}

	/**
	 * @param adh the adh to set
	 */
	public void setAdh(int adh) {
		this.adh = adh;
	}

	public Integer getAdtm() {
		return adtm;
	}

	public void setAdtm(Integer adtm) {
		this.adtm = adtm;
	}

	/**
	 * @return the ade
	 */
	public String getAde() {
		return ade;
	}

	/**
	 * @param ade the ade to set
	 */
	public void setAde(String ade) {
		this.ade = ade;
	}

	/**
	 * @return the adurl
	 */
	public String getAdurl() {
		return adurl;
	}

	/**
	 * @param adurl the adurl to set
	 */
	public void setAdurl(String adurl) {
		this.adurl = adurl;
	}

	/**
	 * @return the deeplink
	 */
	public String getDeeplink() {
		return deeplink;
	}

	/**
	 * @param deeplink the deeplink to set
	 */
	public void setDeeplink(String deeplink) {
		this.deeplink = deeplink;
	}

	/**
	 * @return the adomain
	 */
	public String[] getAdomain() {
		return adomain;
	}

	/**
	 * @param adomain the adomain to set
	 */
	public void setAdomain(String[] adomain) {
		this.adomain = adomain;
	}

	/**
	 * @return the wurl
	 */
	public String getWurl() {
		return wurl;
	}

	/**
	 * @param wurl the wurl to set
	 */
	public void setWurl(String wurl) {
		this.wurl = wurl;
	}

	/**
	 * @return the nurl
	 */
	public Map<String, String[]> getNurl() {
		return nurl;
	}

	/**
	 * @param nurl the nurl to set
	 */
	public void setNurl(Map<String, String[]> nurl) {
		this.nurl = nurl;
	}

	/**
	 * @return the curl
	 */
	public String[] getCurl() {
		return curl;
	}

	/**
	 * @param curl the curl to set
	 */
	public void setCurl(String[] curl) {
		this.curl = curl;
	}

	/**
	 * @return the dealid
	 */
	public String getDealid() {
		return dealid;
	}

	/**
	 * @param dealid the dealid to set
	 */
	public void setDealid(String dealid) {
		this.dealid = dealid;
	}

	/**
	 * @return the cid
	 */
	public String getCid() {
		return cid;
	}

	/**
	 * @param cid the cid to set
	 */
	public void setCid(String cid) {
		this.cid = cid;
	}

	/**
	 * @return the crid
	 */
	public String getCrid() {
		return crid;
	}

	/**
	 * @param crid the crid to set
	 */
	public void setCrid(String crid) {
		this.crid = crid;
	}

	public int[] getAttr() {
		return attr;
	}

	public void setAttr(int[] attr) {
		this.attr = attr;
	}

	/**
	 * @return the ext
	 */
	public Object getExt() {
		return ext;
	}

	/**
	 * @param ext the ext to set
	 */
	public void setExt(Object ext) {
		this.ext = ext;
	}
}
